package main

import (
	"errors"
	"fmt"
)

//实现目的，自带的错误不支持code，添加一个code

//MyError 定义一个error封装
type MyError struct {
	Err  error
	Code int
	t    string
}

func (m MyError) Error() string {
	return fmt.Sprintf("[code:%d] %s", m.Code, m.Err)
}

func NewMyError(err string, code int) MyError {
	return MyError{
		Err:  errors.New(err),
		Code: code,
	}
}

func main() {
	myErr := NewMyError("hhhhhhh。i'm error! honey!", 1)
	fmt.Println(myErr.Error())
	check(myErr)
	check(errors.New("hhhhhh"))
}

func check(myErr interface{}) {
	switch myErr.(type) {
	case MyError:
		fmt.Println("MyError")
	case error:
		fmt.Println("err")
	}
}
